home *** CD-ROM | disk | FTP | other *** search
- /* cat > headers/image.h << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* image.h: header for image.c file. */
- /* image.c contains routines of image file */
- /* operations: image load, save, zoom */
- /* (expansion, interpolation). */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- #define image_h 1
-
- #include "all.h"
- #include "newext.h"
-
- static int iformat;
-
- /* EOF */
- /* cat > src+obj/image/check_image.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* check_image: tries to find a target image or data */
- /* and returns success or failure. Success */
- /* returns some useful information for */
- /* loading. */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- int
- check_image (in_type, fn, pout_type, pdim_x, pdim_y, piref, pload_pal)
- /* returns: 0 - success
- 1 - filename not found
- 2 - raw file - bad dimension
- value(s)
- 3 - raw file - size is wrong
- 4 - no RIS8
- 5 - no SDS-2D
- 6 - no RIS8 or SDS-2D in HDF file
- 7 - size too big
- < 0 - DFerror - other HDF error */
- enum desired_img_type in_type;
- /* input: desired image type */
- char *fn;
- /* input: filename to get image or data set */
- enum img_type *pout_type;
- /* returns: on success the actual image type */
- int *pdim_x;
- /* returns: on success the x dimension of the image or data set */
- int *pdim_y;
- /* returns: on success the y dimension of the image or data set */
- uint16 *piref;
- /* returns: reference number of rig if RIS8 found */
- bool *pload_pal;
- /* input: if TRUE then attempt to load palette
- if RIS8 found.
- returns: set to false if TRUE on input
- and RIS8 found but has no palette. */
- {
- DF *file;
- int dummy, rank;
- struct stat file_stat;
- uint16 tag, ref;
- DFdesc dd;
- DFGRrig rig;
- DFSsdg sdg;
- int dims[MAXSDSRANK];
-
- sdg.dimsizes = NULL;
- sdg.coordsys = NULL;
- sdg.dataluf[0] = NULL;
- sdg.dataluf[1] = NULL;
- sdg.dataluf[2] = NULL;
- sdg.dimluf[0] = NULL;
- sdg.dimluf[1] = NULL;
- sdg.dimluf[2] = NULL;
- sdg.dimscales = NULL;
-
- if ((file = DFopen (fn, DFACC_READ, dummy)) == NULL)
- { /* error */
- switch (DFerror)
- {
- case DFE_FNF: /* file not found */
- return (1);
- case DFE_NOTDFFILE: /* raw file */
- switch (in_type)
- {
- case FIRST: /* check dimensions */
- if (get_imagesize (pdim_x, pdim_y)) /* bad dimensions */
- return (2);
- stat (fn, &file_stat);
- if (file_stat.st_size != (*pdim_x) * (*pdim_y))
- return (3);
- if (!size_ok (*pdim_x, *pdim_y))
- return (7);
- *pout_type = RAWI;
- return (0);
- case HDFR8:
- return (4);
- case HDFS2:
- return (5);
- }
- default:
- return (DFerror);
- }
- }
- /* try to verify the desired image or data in the HDF file */
- switch (in_type)
- {
- case FIRST: /* check for whatever comes first: RIS8 or SDS2D */
- tag = ref = DFTAG_WILDCARD;
- DFR8restart();
- DFSDrestart();
- if (DFsetfind (file, tag, ref))
- {
- DFclose (file);
- return (DFerror);
- }
- while (TRUE)
- {
- if (DFfind (file, &dd))
- {
- DFclose (file);
- return (6);
- }
- switch (dd.tag)
- {
- case DFTAG_RIG:
- if (DFGRgetrig (file, dd.ref, &rig))
- {
- DFclose (file);
- return (DFerror);
- }
- if (rig.datadesc[IMAGE].ncomponents != 1)
- break;
- *pdim_x = rig.datadesc[IMAGE].xdim;
- *pdim_y = rig.datadesc[IMAGE].ydim;
- *pout_type = RIS8;
- *piref = dd.ref;
- if (!rig.data[LUT].tag && *pload_pal)
- *pload_pal = FALSE;
- DFclose (file);
- if (!size_ok (*pdim_x, *pdim_y))
- return (7);
- return (0);
- case DFTAG_SDG:
- if (DFSDgetsdg (file, dd.ref, &sdg))
- {
- DFclose (file);
- return (DFerror);
- }
- if (sdg.rank != 2)
- break;
- *pdim_x = sdg.dimsizes[0];
- *pdim_y = sdg.dimsizes[1];
- *pout_type = SDS2D;
- DFclose (file);
- if (!size_ok (*pdim_x, *pdim_y))
- return (7);
- return (0);
- default:
- break;
- }
- }
- case HDFR8: /* check for first RIS8 */
- tag = DFTAG_RIG;
- ref = DFTAG_WILDCARD;
- DFR8restart();
- if (DFsetfind (file, tag, ref))
- {
- DFclose (file);
- return (DFerror);
- }
- while (TRUE)
- {
- if (DFfind (file, &dd))
- {
- DFclose (file);
- return (4);
- }
- if (DFGRgetrig (file, dd.ref, &rig))
- {
- DFclose (file);
- return (DFerror);
- }
- if (rig.datadesc[IMAGE].ncomponents != 1)
- break;
- *pdim_x = rig.datadesc[IMAGE].xdim;
- *pdim_y = rig.datadesc[IMAGE].ydim;
- *pout_type = RIS8;
- *piref = dd.ref;
- if (!rig.data[LUT].tag && *pload_pal)
- *pload_pal = FALSE;
- DFclose (file);
- if (!size_ok (*pdim_x, *pdim_y))
- return (7);
- return (0);
- }
- case HDFS2: /* check for first SDS2D */
- DFclose (file);
- DFSDrestart ();
- while (TRUE)
- {
- if (DFSDgetdims (fn, &rank, dims, MAXSDSRANK))
- switch (DFerror)
- {
- case DFE_NOMATCH: /* not SDS-2D in file */
- return (4);
- case DFE_NOTENOUGH: /* rank too big */
- break;
- default:
- return (DFerror);
- }
- else if (rank == 2)
- { /* 2D dataset found */
- *pdim_x = dims[0];
- *pdim_y = dims[1];
- *pout_type = SDS2D;
- if (!size_ok (*pdim_x, *pdim_y))
- return (7);
- return (0);
- }
- }
- }
- }
- /* EOF */
- /* cat > src+obj/image/check_imgfn.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* check_imgfn: resolve image filename. */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- int
- check_imgfn (imgfile)
- /* returns: error - value returned by
- get_abspathname */
- char *imgfile;
- /* input: string of size MAXNAMELEN - 1
- returns: (no error) resolved image filename
- (error) nothing of significance */
- {
- /* get filename */
- strcpy (imgfile, (char *) panel_get_value (image_board));
- return (get_abspathname (imgfile, MAXNAMELEN, TYPE_FILE));
- }
- /* EOF */
- /* cat > src+obj/image/copy_line.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* copy_line: copy a line */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- copy_line (s1, s2, n)
- char *s1, *s2;
- {
- register i;
-
- for (i = 0; i < n; i++)
- *s1++ = *s2++;
- }
- /* EOF */
- /* cat > src+obj/image/create_image_menu.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* create_image_menu: create menu for 'IMAGE' */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- create_image_menu ()
- {
- /* submenu must be before menu! */
- ani_sub_menu = menu_create (MENU_FONT, font_menu,
- MENU_STRINGS,
- "Regular size",
- "Zoom (2X)",
- 0,
- MENU_NOTIFY_PROC, animate_proc,
- 0);
- /* menu creation */
- image_menu = menu_create (MENU_ITEM,
- MENU_STRING, "Load",
- MENU_FONT, font_menu,
- MENU_NOTIFY_PROC, load_proc,
- 0,
- MENU_ITEM,
- MENU_STRING, "Save",
- MENU_FONT, font_menu,
- MENU_ACTION_PROC, save_proc,
- 0,
- MENU_ITEM,
- MENU_STRING, "Animate",
- MENU_FONT, font_menu,
- MENU_PULLRIGHT, ani_sub_menu,
- 0,
- MENU_ITEM,
- MENU_STRING, "Stack",
- MENU_FONT, font_menu,
- MENU_ACTION_PROC, stack_proc,
- 0,
- 0);
-
- }
- /* EOF */
- /* cat > src+obj/image/create_imagesave_box.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* create_imagesave_box: create save image frame */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "option.h" */
-
- create_imagesave_box ()
- {
- int h, w;
-
- imagesave_box = window_create (0, FRAME,
- FRAME_SHOW_LABEL, FALSE,
- WIN_SHOW, FALSE,
- 0);
- imagesave_panel = window_create (imagesave_box, PANEL,
- PANEL_FONT, font_panel,
- PANEL_LABEL_BOLD, TRUE,
- 0);
- panel_create_item (imagesave_panel, PANEL_MESSAGE,
- PANEL_LABEL_STRING, "Please enter image filename -",
- 0);
- imagesave_item = panel_create_item (imagesave_panel, PANEL_TEXT,
- PANEL_VALUE_DISPLAY_LENGTH, 64,
- PANEL_VALUE_STORED_LENGTH, MAXNAMELEN - 1,
- PANEL_LABEL_STRING, " Filename: ",
- /*
- PANEL_MENU_CHOICE_STRINGS,
- "^N - Get directory name",
- 0,
- PANEL_MENU_CHOICE_FONTS,
- font_menu,
- 0,
- PANEL_MENU_CHOICE_VALUES,
- CTRL_N,
- 0,
- PANEL_SHOW_MENU, TRUE,
- PANEL_NOTIFY_LEVEL, PANEL_ALL,
- PANEL_NOTIFY_PROC, defaults_proc,
- PANEL_CLIENT_DATA, 1,
- */
- 0);
- imagesave_toggle = panel_create_item (imagesave_panel, PANEL_CYCLE,
- PANEL_LABEL_STRING, "Save:",
- PANEL_CHOICE_STRINGS,
- "Image and palette (HDF)",
- "Compressed image and palette (HDF)",
- "Image (Raw)",
- 0,
- 0);
- panel_create_item (imagesave_panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image (imagesave_panel, "Ok", 3, font_panel_button),
- PANEL_CLIENT_DATA, 1,
- PANEL_NOTIFY_PROC, imagesave_ok_cancel,
- 0);
- panel_create_item (imagesave_panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image (imagesave_panel, "Cancel", 6, font_panel_button),
- PANEL_CLIENT_DATA, 0,
- PANEL_NOTIFY_PROC, imagesave_ok_cancel,
- 0);
- window_fit (imagesave_panel);
- window_fit (imagesave_box);
-
- w = (int) window_get (imagesave_box, WIN_WIDTH);
- h = (int) window_get (imagesave_box, WIN_HEIGHT);
- window_set (imagesave_box, WIN_X, 1150 / 2 - w / 2, WIN_Y, 900 / 2 - h / 2, 0);
-
- /* set color map same with imagetool */
- (void) color_def_win ();
-
- }
- /* EOF */
- /* cat > src+obj/image/get_imagename.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* get_imagename: get name of image */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- char **
- get_imagename ()
- /* returns: pointer to list of filesnames */
- {
- char fname[MAXNAMELEN];
- char **lfn;
- int err;
-
- /* get filename expression and expand */
- strcpy (fname, (char *) panel_get_value (image_board));
- if (strlen (fname) == 0)
- {
- msg_write ("Error: No image filename(s).");
- return (NULL);
- }
- lfn = wildcard (fname, &err);
- /*
- FIX: Does wildcard handle the case when the pathname is absolute or
- relative with ..?
- */
- switch (err)
- {
- case 0: /* No error */
- break;
- case 1: /* Syntax error */
- msg_write ("Error: Syntax error in image filename(s).");
- return (NULL);
- case 2: /* Memory allocation error */
- msg_write ("Error: Not enough memory to process image filename(s).");
- return (NULL);
- }
- if (lfn[0] == NULL)
- {
- msg_write ("Error: Image file(s) do not exist.");
- return (NULL);
- }
- return (lfn);
- }
- /* EOF */
- /* cat > src+obj/image/get_imagesize.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* get_imagesize: get dimensions for raw image. */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- int
- get_imagesize (px, py)
- /* returns: 0 - success
- 1 - bad dimensions */
- int *px, *py;
- /* returns: on success the pointers to the x
- and y dimensions */
- {
- char *ptr;
-
- /* get and check dimensions */
- *px = strtol ((char *) panel_get_value (xdim_item), &ptr, 10);
- if (*ptr != NULL || *px <= 0)
- return (1);
- *py = strtol ((char *) panel_get_value (ydim_item), &ptr, 10);
- if (*ptr != NULL || *py <= 0)
- return (1);
- return (0);
- }
- /* EOF */
- /* cat > src+obj/image/image_board_proc.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* image_board_proc: handler called on text input */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- Panel_setting
- image_board_proc (item, event)
- Panel_item item;
- Event *event;
- {
- switch (event_id (event))
- {
- case CTRL_N:
- (void) display_pathnamesw ("Get image filename", update_image_board);
- return PANEL_NONE;
- case CTRL_L:
- load_image ();
- return PANEL_NONE;
- case CTRL_A:
- animation (0);
- return PANEL_NONE;
- case CTRL_C:
- clear (item, event);
- return PANEL_NONE;
- default:
- return panel_text_notify (item, event);
- }
- }
- /* EOF */
- /* cat > src+obj/image/image_handler.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* image_handler: handler for image menu */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- image_handler (item, event)
- Panel_item item;
- Event *event;
- {
- /* display image menu */
- if (display_panel_menu (item, event, menu_panel, image_menu))
- load_image ();
- }
- /* EOF */
- /* cat > src+obj/image/image_open.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* image_open: open image */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- image_open (fname)
- char *fname;
- {
- return (open (fname, O_RDONLY));
- }
- /* EOF */
- /* cat > src+obj/save/imagesave_ok_cancel.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* imagesave_ok_cancel: ok/cancel notify proc for */
- /* saving image */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- imagesave_ok_cancel (item, event)
- Panel_item item;
- Event *event;
- {
- int which_item, nw, f;
- int value;
- char image[MAXNAMELEN];
- struct pixrect *pr;
- struct mpr_data *mpr;
- int xdim, ydim, xpos, ypos;
- char str[20];
-
- if ((which_item = (int) panel_get (item, PANEL_CLIENT_DATA)))
- {
- strcpy (image, (char *) panel_get_value (imagesave_item));
-
- /* check value - report first error and wait for the
- user to respond again */
-
- if ((nw = word_count (image)) == 0)
- { /* null entry */
- msg_write ("Error: No filename. Please provide one or cancel.");
- return;
- }
- else if (nw != 1)
- {
- msg_write ("Error: More than one filename. Please provide only one or cancel.");
- return;
- }
- (void) strip_wspace (image);
-
- /* append size to filename if file will be saved as RAW */
- value = (int) panel_get_value (imagesave_toggle);
- if (value == 2)
- { /* Raw */
- sprintf(str, ".%dx%d", xdim, ydim);
- strcat(image, str);
- }
- if ((f = creat (image, 0644)) == -1)
- {
- msg_write ("Error: File creation failed. Bad path or access problem.");
- return;
- }
-
- xdim = curr_image.xdim;
- ydim = curr_image.ydim;
- xpos = curr_image.startx;
- ypos = curr_image.starty;
-
- /* create memory */
- if ((pr = mem_create (xdim, ydim, PIXDEPTH)) == NULL)
- {
- msg_write ("Error: Not enough memory to make copy of image to save.");
- close(f);
- return(-1);
- }
-
- /* read image from canvas */
- pw_read (pr, 0, 0, xdim, ydim, PIX_SRC, pw, xpos, ypos);
- mpr = mpr_d(pr);
-
- /* reverse image if necessary */
- if(rev_image)
- {
- if (reverse_image (mpr->md_image, xdim, ydim))
- {
- msg_write ("Error: Not enought memory to reverse image.");
- pr_close(pr);
- close(f);
- return(-1);
- }
- }
- /* f is closed in save_image */
- if (save_image (f, image, xdim, ydim, mpr->md_image, value))
- {
- pr_close (pr);
- return;
- }
- window_set (imagesave_box, WIN_SHOW, FALSE, 0);
- msg_write ("Note: Image saved.");
- }
- else
- window_set (imagesave_box, WIN_SHOW, FALSE, 0);
-
- return;
- }
- /* EOF */
- /* cat > src+obj/image/load_RAWI.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* load_RAWI.c: routine to load and display a raw */
- /* image. */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- int
- load_RAWI (fn, dim_x, dim_y, state)
- /* returns: error - 0 = no error
- -1 = error in loading
- or displaying */
- char *fn;
- /* input: filename with raw image */
- int dim_x, dim_y;
- /* input: x and y dimensions */
- int state;
- /* input: state - SINGLE_IMAGE = single image
- ANIMATION = animation
- FTP_SEQUENCE = ftp sequencing */
- {
- struct pixrect *pr, *ptr;
- struct mpr_data *mpr;
- int f;
- int nchar;
-
- /* create memory for image */
- if ((pr = mem_create (dim_x, dim_y, PIXDEPTH)) == NULL)
- {
- msg_write ("Error: Not enough memory to load image.");
- return (-1);
- }
-
- /* read image from disk */
- mpr = mpr_d (pr);
- if ((f = image_open (fn)) == -1)
- {
- msg_write ("Error: Could not open image file to read.");
- pr_close (pr);
- return (-1);
- }
- if ((nchar = read (f, (char *) mpr->md_image, dim_x * dim_y)) == -1)
- {
- msg_write ("Error: Could not read image file.");
- pr_close (pr);
- return (-1);
- }
- close (f);
- if (nchar != dim_x * dim_y)
- {
- sprintf (wkstr, "Error: Only %d characters of image file read. Should have been %d.", nchar, dim_x * dim_y);
- msg_write (wkstr);
- pr_close (pr);
- return (-1);
- }
-
- /* pad image */
- pad_image (dim_x, dim_y, pr);
-
- /* reverse image if necessary */
- if (rev_image)
- {
- if (reverse_image (mpr->md_image, dim_x, dim_y))
- {
- msg_write ("Error: Not enough memory to reverse image.");
- pr_close (pr);
- return (-1);
- }
- }
-
- switch (state)
- {
- case SINGLE_IMAGE:
- /* write image to canvas, release memory */
- pw_write (pw, startx, starty, dim_x, dim_y, PIX_SRC, pr, 0, 0);
- pr_close (pr);
- break;
- case ANIMATION:
- if (curr_movie.expanded)
- {
- if ((image[curr_movie.nth_image] = expand2 (pr, dim_x, dim_y, 2)) == NULL)
- {
- pr_close (pr);
- return (-1);
- }
- else
- { /* write expanded image to canvas, release unexpanded memory */
- pw_write (pw, startx, starty, 2 * dim_x, 2 * dim_y, PIX_SRC, image[curr_movie.nth_image], 0, 0);
- pr_close (pr);
- }
- }
- else
- { /* write image to canvas */
- image[curr_movie.nth_image] = pr;
- pw_write (pw, startx, starty, dim_x, dim_y, PIX_SRC, image[curr_movie.nth_image], 0, 0);
- }
- break;
- case FTP_SEQUENCE:
- if (loop_zoomed)
- {
- if ((ptr = expand2 (pr, dim_x, dim_y, 2)) == NULL)
- {
- pr_close (pr);
- return (-1);
- }
- else
- { /* write expanded image to canvas, release memory */
- pw_write (pw, startx, starty, 2 * dim_x, 2 * dim_y, PIX_SRC, ptr, 0, 0);
- pr_close (ptr);
- pr_close (pr);
- }
- }
- else
- { /* write image to canvas, release memory */
- pw_write (pw, startx, starty, dim_x, dim_y, PIX_SRC, pr, 0, 0);
- pr_close (pr);
- }
- break;
- }
-
- /* save important info */
- switch (state)
- {
- case SINGLE_IMAGE:
- strcpy (curr_image.img_name, fn);
- curr_image.itype = RAWI;
- curr_image.img_num = 0;
- strcpy (curr_image.pal_name, curr_pal.fn);
- curr_image.ptype = curr_pal.type;
- curr_image.pal_num = curr_pal.num;
- curr_image.startx = startx;
- curr_image.starty = starty;
- curr_image.org_xdim = dim_x;
- curr_image.org_ydim = dim_y;
-
- curr_image.xdim = dim_x;
- curr_image.ydim = dim_y;
- curr_image.zoomx = 1;
- curr_image.zoomy = 1;
- curr_image.expanded = 0;
-
- curr_image.cutout = 0;
- curr_image.nth_image = 0;
- curr_image.image = NULL;
-
- return (0);
- case ANIMATION:
- return (0);
- case FTP_SEQUENCE:
- strcpy (curr_image.img_name, fn);
- curr_image.itype = RAWI;
- curr_image.img_num = 0;
- strcpy (curr_image.pal_name, curr_pal.fn);
- curr_image.ptype = curr_pal.type;
- curr_image.pal_num = curr_pal.num;
- curr_image.startx = startx;
- curr_image.starty = starty;
- curr_image.org_xdim = dim_x;
- curr_image.org_ydim = dim_y;
-
- if(loop_zoomed)
- {
- curr_image.xdim = dim_x * 2;
- curr_image.ydim = dim_y * 2;
- curr_image.zoomx = 2;
- curr_image.zoomy = 2;
- curr_image.expanded = 1;
- }
- else
- {
- curr_image.xdim = dim_x;
- curr_image.ydim = dim_y;
- curr_image.zoomx = 1;
- curr_image.zoomy = 1;
- curr_image.expanded = 0;
- }
-
- curr_image.cutout = 0;
- curr_image.nth_image = 0;
- curr_image.image = NULL;
-
- return (0);
- }
- }
- /* EOF */
- /* cat > src+obj/image/load_RIS8.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* load_RIS8.c: routine to load and display a 8-Bit */
- /* raster image set. */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- int
- load_RIS8 (fn, dim_x, dim_y, ref, load_pal, state)
- /* returns error - 0 = no error
- -1 = error in loading
- or displaying */
- char *fn;
- /* input: filename with RIS8 image */
- int dim_x, dim_y;
- /* input: x and y dimensions */
- uint16 ref;
- /* input: reference number of RIS8 rig */
- bool load_pal;
- /* input: FALSE - ignore palette
- TRUE - attempt to load palette */
- int state;
- /* input: state - SINGLE_IMAGE = single image
- ANIMATION = animation
- FTP_SEQUENCE = ftp sequencing */
- {
- struct pixrect *pr, *ptr;
- struct mpr_data *mpr;
- int f;
- int n;
- unsigned char palette[PALETTE_SIZE];
-
- /* create memory for image */
- if ((pr = mem_create (dim_x, dim_y, PIXDEPTH)) == NULL)
- {
- msg_write ("Error: Not enough memory to load image.");
- return (-1);
- }
-
- /* read image from disk */
- mpr = mpr_d (pr);
- if (DFR8readref (fn, ref))
- {
- sprintf (wkstr, "HDF error (DFerror = %d): While trying to locate the RIS8 in the file.", DFerror);
- msg_write (wkstr);
- return (-1);
- }
- if (load_pal)
- {
- if (DFR8getimage (fn, (char *) mpr->md_image, dim_x, dim_y, palette))
- {
- sprintf (wkstr, "HDF error (DFerror = %d): While trying to read the RIS8 in the file.", DFerror);
- msg_write (wkstr);
- return (-1);
- }
- /* no checking done */
- (void) set_palHDF (fn, PAL_RIS8, palette, REGULAR);
- }
- else
- {
- if (DFR8getimage (fn, (char *) mpr->md_image, dim_x, dim_y, NULL))
- {
- sprintf (wkstr, "HDF error (DFerror = %d): While trying to read the RIS8 in the file.", DFerror);
- msg_write (wkstr);
- return (-1);
- }
- }
-
- /* pad image */
- pad_image (dim_x, dim_y, pr);
-
- /* reverse image if necessary */
- if (rev_image)
- {
- if (reverse_image (mpr->md_image, dim_x, dim_y))
- {
- msg_write ("Error: Not enough memory to reverse image.");
- pr_close (pr);
- return (-1);
- }
- }
-
- switch (state)
- {
- case SINGLE_IMAGE:
- /* write image to canvas, release memory */
- pw_write (pw, startx, starty, dim_x, dim_y, PIX_SRC, pr, 0, 0);
- pr_close (pr);
- break;
- case ANIMATION:
- if (curr_movie.expanded)
- {
- if ((image[curr_movie.nth_image] = expand2 (pr, dim_x, dim_y, 2)) == NULL)
- {
- pr_close (pr);
- return (-1);
- }
- else
- { /* write expanded image to canvas, release unexpanded memory */
- pw_write (pw, startx, starty, 2 * dim_x, 2 * dim_y, PIX_SRC, image[curr_movie.nth_image], 0, 0);
- pr_close (pr);
- }
- }
- else
- { /* write image to canvas */
- image[curr_movie.nth_image] = pr;
- pw_write (pw, startx, starty, dim_x, dim_y, PIX_SRC, image[curr_movie.nth_image], 0, 0);
- }
- break;
- case FTP_SEQUENCE:
- if (loop_zoomed)
- {
- if ((ptr = expand2 (pr, dim_x, dim_y, 2)) == NULL)
- {
- pr_close (pr);
- return (-1);
- }
- else
- { /* write expanded image to canvas, release memory */
- pw_write (pw, startx, starty, 2 * dim_x, 2 * dim_y, PIX_SRC, ptr, 0, 0);
- pr_close (ptr);
- pr_close (pr);
- }
- }
- else
- { /* write image to canvas, release memory */
- pw_write (pw, startx, starty, dim_x, dim_y, PIX_SRC, pr, 0, 0);
- pr_close (pr);
- }
- break;
- }
-
- /* put out dimensions */
- put_imagesize (dim_x, dim_y);
-
- /* save important info */
- switch (state)
- {
- case SINGLE_IMAGE:
- strcpy (curr_image.img_name, fn);
- curr_image.itype = RIS8;
- curr_image.img_num = 1;
- strcpy (curr_image.pal_name, curr_pal.fn);
- curr_image.ptype = curr_pal.type;
- curr_image.pal_num = curr_pal.num;
- curr_image.startx = startx;
- curr_image.starty = starty;
- curr_image.org_xdim = dim_x;
- curr_image.org_ydim = dim_y;
-
- curr_image.xdim = dim_x;
- curr_image.ydim = dim_y;
- curr_image.zoomx = 1;
- curr_image.zoomy = 1;
- curr_image.expanded = 0;
-
- curr_image.cutout = 0;
- curr_image.nth_image = 0;
- curr_image.image = NULL;
-
- return (0);
- case ANIMATION:
- return (0);
- case FTP_SEQUENCE:
- strcpy (curr_image.img_name, fn);
- curr_image.itype = RIS8;
- curr_image.img_num = 1;
- strcpy (curr_image.pal_name, curr_pal.fn);
- curr_image.ptype = curr_pal.type;
- curr_image.pal_num = curr_pal.num;
- curr_image.startx = startx;
- curr_image.starty = starty;
- curr_image.org_xdim = dim_x;
- curr_image.org_ydim = dim_y;
-
- if(loop_zoomed)
- {
- curr_image.xdim = dim_x * 2;
- curr_image.ydim = dim_y * 2;
- curr_image.zoomx = 2;
- curr_image.zoomy = 2;
- curr_image.expanded = 1;
- }
- else
- {
- curr_image.xdim = dim_x;
- curr_image.ydim = dim_y;
- curr_image.zoomx = 1;
- curr_image.zoomy = 1;
- curr_image.expanded = 0;
- }
-
- curr_image.cutout = 0;
- curr_image.nth_image = 0;
- curr_image.image = NULL;
-
- return (0);
- }
- }
- /* EOF */
- /* cat > src+obj/image/load_SDS2D.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* load_SDS2D.c: routine to load and display a 2-D */
- /* Scientific Data Set image. */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- int
- load_SDS2D (fn, dim_x, dim_y, state)
- /* returns error - 0 = no error
- -1 = error in loading
- or displaying */
- char *fn;
- /* input: filename with raw image */
- int dim_x, dim_y;
- /* input: x and y dimensions */
- int state;
- /* input: state - SINGLE_IMAGE = single image
- ANIMATION = animation
- FTP_SEQUENCE = ftp sequencing */
- {
- struct pixrect *pr, *ptr;
- struct mpr_data *mpr;
- float *fmem;
- int rank;
- int dims[MAXSDSRANK];
-
- /* create memory for data and image */
- if ((fmem = (float *) malloc (dim_x * dim_y * sizeof (float))) == NULL)
- {
- msg_write ("Error: Not enough memory to load 2-D data set.");
- return (-1);
- }
- if ((pr = mem_create (dim_x, dim_y, PIXDEPTH)) == NULL)
- {
- msg_write ("Error: Not enough memory to make scaled image.");
- free ((char *) fmem);
- return (-1);
- }
-
- /* read image from disk */
- DFSDrestart();
- while (TRUE)
- {
- if (DFSDgetdims (fn, &rank, dims, MAXSDSRANK))
- {
- switch (DFerror)
- {
- case DFE_NOTENOUGH: /* rank too big */
- break;
- default:
- sprintf (wkstr, "Internal Error (DFerror = %d): While trying to load 2-D Scientific Data Set.", DFerror);
- msg_write (wkstr);
- free ((char *) fmem);
- pr_close (pr);
- return (-1);
- }
- }
- else if (rank == 2) /* 2D dataset found */
- {
- if (dims[0] != dim_x || dims[1] != dim_y)
- {
- sprintf (wkstr, "Internal Error: Inconsistent dimensions - (x, y): incoming (%d, %d) - found (%d, %d).", dim_x, dim_y, dims[0], dims[1]);
- msg_write (wkstr);
- free ((char *) fmem);
- pr_close (pr);
- return (-1);
- }
- else if (DFSDgetdata (fn, rank, dims, fmem))
- {
- sprintf (wkstr, "Internal Error (DFerror = %d): While trying to load 2-D Scientific Data Set.", DFerror);
- msg_write (wkstr);
- free ((char *) fmem);
- pr_close (pr);
- return (-1);
- }
- break;
- }
- }
-
- /* supply a warning about dialog box - if one is to appear */
- if (((int) panel_get_value (SDS_toggle)) == 0)
- msg_write ("Note: Please wait for dialog box to scale image.");
-
- /* scale image */
- if (image_scale (dim_x, dim_y, fmem, pr))
- {
- free ((char *) fmem);
- pr_close (pr);
- return (-1);
- }
- free ((char *) fmem);
-
- /* pad image */
- pad_image (dim_x, dim_y, pr);
-
- /* reverse image if necessary */
- mpr = mpr_d (pr);
- if (rev_image)
- {
- if (reverse_image (mpr->md_image, dim_x, dim_y))
- {
- msg_write ("Error: Not enough memory to reverse image.");
- pr_close (pr);
- return (-1);
- }
- }
-
- switch (state)
- {
- case SINGLE_IMAGE:
- /* write image to canvas, release memory */
- pw_write (pw, startx, starty, dim_x, dim_y, PIX_SRC, pr, 0, 0);
- pr_close (pr);
- break;
- case ANIMATION:
- if (curr_movie.expanded)
- {
- if ((image[curr_movie.nth_image] = expand2 (pr, dim_x, dim_y, 2)) == NULL)
- {
- pr_close (pr);
- return (-1);
- }
- else
- { /* write expanded image to canvas, release unexpanded memory */
- pw_write (pw, startx, starty, 2 * dim_x, 2 * dim_y, PIX_SRC, image[curr_movie.nth_image], 0, 0);
- pr_close (pr);
- }
- }
- else
- { /* write image to canvas */
- image[curr_movie.nth_image] = pr;
- pw_write (pw, startx, starty, dim_x, dim_y, PIX_SRC, image[curr_movie.nth_image], 0, 0);
- }
- break;
- case FTP_SEQUENCE:
- if (loop_zoomed)
- {
- if ((ptr = expand2 (pr, dim_x, dim_y, 2)) == NULL)
- {
- pr_close (pr);
- return (-1);
- }
- else
- { /* write expanded image to canvas, release memory */
- pw_write (pw, startx, starty, 2 * dim_x, 2 * dim_y, PIX_SRC, ptr, 0, 0);
- pr_close (ptr);
- pr_close (pr);
- }
- }
- else
- { /* write image to canvas, release memory */
- pw_write (pw, startx, starty, dim_x, dim_y, PIX_SRC, pr, 0, 0);
- pr_close (pr);
- }
- break;
- }
-
- /* put out dimensions */
- put_imagesize (dim_x, dim_y);
-
- /* save important info */
- switch (state)
- {
- case SINGLE_IMAGE:
- strcpy (curr_image.img_name, fn);
- curr_image.itype = SDS2D;
- curr_image.img_num = 1;
- strcpy (curr_image.pal_name, curr_pal.fn);
- curr_image.ptype = curr_pal.type;
- curr_image.pal_num = curr_pal.num;
- curr_image.startx = startx;
- curr_image.starty = starty;
- curr_image.org_xdim = dim_x;
- curr_image.org_ydim = dim_y;
-
- curr_image.xdim = dim_x;
- curr_image.ydim = dim_y;
- curr_image.zoomx = 1;
- curr_image.zoomy = 1;
- curr_image.expanded = 0;
-
- curr_image.cutout = 0;
- curr_image.nth_image = 0;
- curr_image.image = NULL;
-
- return (0);
- case ANIMATION:
- return (0);
- case FTP_SEQUENCE:
- strcpy (curr_image.img_name, fn);
- curr_image.itype = SDS2D;
- curr_image.img_num = 1;
- strcpy (curr_image.pal_name, curr_pal.fn);
- curr_image.ptype = curr_pal.type;
- curr_image.pal_num = curr_pal.num;
- curr_image.startx = startx;
- curr_image.starty = starty;
- curr_image.org_xdim = dim_x;
- curr_image.org_ydim = dim_y;
-
- if(loop_zoomed)
- {
- curr_image.xdim = dim_x * 2;
- curr_image.ydim = dim_y * 2;
- curr_image.zoomx = 2;
- curr_image.zoomy = 2;
- curr_image.expanded = 1;
- }
- else
- {
- curr_image.xdim = dim_x;
- curr_image.ydim = dim_y;
- curr_image.zoomx = 1;
- curr_image.zoomy = 1;
- curr_image.expanded = 0;
- }
-
- curr_image.cutout = 0;
- curr_image.nth_image = 0;
- curr_image.image = NULL;
-
- return (0);
- }
- }
- /* EOF */
- /* cat > src+obj/image/load_image.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* load_image: main routine for loading an image. */
- /* Should be same as load_proc */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- int
- load_image ()
- {
- if (load_proc2 ((int) panel_get_value (load_toggle)))
- return;
-
- reset_pos ();
- line_drawn = square_drawn = 0;
- clear_request = 0;
- first_middle_down = 0;
- return (0);
- }
- /* EOF */
- /* cat > src+obj/image/load_proc.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* load_proc: notify procedure for load_image menu */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- void
- load_proc (m, mi)
- Menu m;
- Menu_item mi;
- {
- if (load_proc2 ((int) panel_get_value (load_toggle)))
- return;
-
- reset_pos ();
- line_drawn = square_drawn = 0;
- clear_request = 0;
- first_middle_down = 0;
- return;
- }
- /* EOF */
- /* cat > src+obj/image/load_proc2.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* load_proc2: attempt to load image of desired type */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- int
- load_proc2 (index_type)
- /* returns: 0 - success
- -1 - error */
- int index_type;
- /* input: index of what to load from load_toggle */
- {
- enum desired_img_type in_type;
- enum img_type out_type;
- int err;
- char filename[MAXNAMELEN];
- int dim_x, dim_y;
- uint16 iref;
- bool load_pal, load_pal_old;
-
- in_type = index_type % 3;
- load_pal = (index_type < 2) ? TRUE : FALSE;
-
- switch ((err = check_imgfn (filename)))
- {
- case 0: /* no error */
- break;
- case 1:
- msg_write ("Error: Image file not found.");
- return (-1);
- case 2:
- msg_write ("Error: Image file not a file.");
- return (-1);
- case 3:
- msg_write ("Error: No image filename.");
- return (-1);
- case 4:
- msg_write ("Error: More than one image file given.");
- return (-1);
- case 5:
- msg_write ("Error: Wildcard matches more than one image file.");
- return (-1);
- case 6:
- msg_write ("Error: Wildcard syntax.");
- return (-1);
- default:
- sprintf (wkstr, "Internal error (%d): While checking image filename.", err);
- msg_write (wkstr);
- return (-1);
- }
- /* printf */
- /* msg_write ("just before check_image"); */
-
- load_pal_old = load_pal;
- switch ((err = check_image (in_type, filename, &out_type, &dim_x, &dim_y, &iref, &load_pal)))
- {
- case 0: /* no error */
- break;
- case 1:
- msg_write ("Error: Image file does not exist.");
- return (-1);
- case 2:
- msg_write ("Error: Dimension(s) are bad.");
- return (-1);
- case 3:
- msg_write ("Error: Size of image doesn't match dimensions.");
- return (-1);
- case 4:
- msg_write ("Error: No 8-bit Raster Image Set found in image file.");
- return (-1);
- case 5:
- msg_write ("Error: No 2D Scientific Data Set found in image file.");
- return (-1);
- case 6:
- msg_write ("Error: No 8-bit Raster Image Set or 2D Scientific Data Set found in image file.");
- return (-1);
- case 7:
- sprintf (wkstr, "Error: Image too big!. (x, y) size = (%d, %d) not in range (%d, %d)", dim_x, dim_y, XMAX_IMAGE, YMAX_IMAGE);
- msg_write (wkstr);
- return (-1);
- default:
- sprintf (wkstr, "HDF file error (DFerror = %d): While checking image file.", err);
- msg_write (wkstr);
- return (-1);
- }
- if (out_type == RIS8 && (load_pal != load_pal_old))
- msg_write ("Warning: No palette with 8-bit Raster Image Set in image file.");
-
- /* printf */
- /* sprintf (wkstr, "load_proc2: %d, %d, %d, %d", dim_x, dim_y, iref, load_pal);
- msg_write(wkstr); */
-
- switch (out_type)
- {
- case RAWI:
- if (load_RAWI (filename, dim_x, dim_y, SINGLE_IMAGE))
- return (-1);
- break;
- case RIS8:
- if (load_RIS8 (filename, dim_x, dim_y, iref, load_pal, SINGLE_IMAGE))
- return (-1);
- break;
- case SDS2D:
- /* printf */
- /* msg_write ("load_proc2: before load_SDS2D"); */
- if (load_SDS2D (filename, dim_x, dim_y, SINGLE_IMAGE))
- return (-1);
- break;
- }
- return (0);
- }
- /* EOF */
- /* cat > src+obj/image/pad_image.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* pad_image: expand and pad a memory pixrect with */
- /* NULL. */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- void
- pad_image (xpts, ypts, mpr)
- int xpts, ypts;
- struct pixrect *mpr;
- {
- struct mpr_data *d;
- char *image;
- register int i, j, k, npad;
- register char *p0, *p1;
-
- d = mpr_d (mpr);
- image = (char *) d->md_image;
- p0 = image + xpts * ypts - 1;
-
- npad = pixrect_pad (xpts);
- p1 = image + (xpts + npad) * ypts - 1;
-
- /* printf ("xpts, npad = %d %d\n", xpts, npad); */
-
- if (npad == 0) /* no padding required */
- return;
-
- /* make space and pad with NULL's */
- for (k = 0; k < npad; k++)
- *p1-- = NULL;
- for (i = 0; i < ypts - 1; i++)
- { /* do all rows except first */
- for (j = 0; j < xpts; j++)
- *p1-- = *p0--;
- for (k = 0; k < npad; k++)
- *p1-- = NULL;
- }
- return;
- }
- /* EOF */
- /* cat > src+obj/image/put_imagesize.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* put_imagesize: puts out the dimensions on the panel */
- /* for HDF files. */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- int
- put_imagesize (dim_x, dim_y)
- /* returns: 0 - success (should not fail) */
- int dim_x, dim_y;
- /* input: dimensions of image or dataset */
- {
-
- /* write dimensions to panel */
- sprintf (wkstr, "%d", dim_x);
- panel_set_value (xdim_item, wkstr);
- sprintf (wkstr, "%d", dim_y);
- panel_set_value (ydim_item, wkstr);
-
- return (0);
- }
- /* EOF */
- /* cat > src+obj/image/reverse_image.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* reverse_image: flip image about horizontal center */
- /* line. */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- reverse_image (ptr, xdim, ydim)
- /* returns: error - 0 = no error
- -1 = error in allocating
- temporary storage */
- char *ptr;
- int xdim, ydim;
- {
- register char *p;
- register int i, j, ix, jy, npad;
-
- if ((p = (char *) malloc (xdim)) == NULL)
- {
- msg_write ("Error: Not enough memory when trying to flip image.");
- return (-1);
- }
-
- npad = pixrect_pad (xdim);
- xdim += npad;
-
- i = 0;
- j = ydim - 1;
- while (i < j)
- {
- ix = i * xdim;
- jy = j * xdim;
- copy_line (p, &ptr[jy], xdim);
- copy_line (&ptr[jy], &ptr[ix], xdim);
- copy_line (&ptr[ix], p, xdim);
- i++;
- j--;
- }
- free (p);
- return (0);
- }
- /* EOF */
- /* cat > src+obj/image/save_image.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* save_image: stores image alone in raw raster file */
- /* or dimensions, image, and palette as a */
- /* HDF 8-bit Raster Image set. */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- #include "all.h"
- #include "newext.h"
-
- int
- save_image (f, fn, nx, ny, s, mode)
- int f; /* input: file descriptor to write to.
- f is closed in this routine */
- char *fn; /* input: filename */
- int nx, ny; /* input: dimensions of image */
- unsigned char *s; /* input: image */
- int mode; /* input: 0 - HDF 8-bit Raster Image set
- (uncompressed)
- 1 - HDF 8-bit Raster Image set
- (compressed)
- 2 - image only in raw raster */
- {
- int i, nw;
- unsigned char *p_palette;
- unsigned char red[LUTSIZE], green[LUTSIZE], blue[LUTSIZE];
-
- if (mode == 0 || mode == 1) /* HDF 8-bit Raster Image set */
- {
- close (f);
- p_palette = palette;
- pw_getcolormap (pw, 0, color_index, red, green, blue);
- for (i = 0; i < 256; i++)
- {
- *p_palette++ = red[i];
- *p_palette++ = green[i];
- *p_palette++ = blue[i];
- }
- if (DFR8setpalette (palette))
- {
- sprintf (wkstr, "Error: HDF setpalette call failed (DFerror = %d).", DFerror);
- msg_write (wkstr);
- return (-1);
- }
- if (DFR8putimage (fn, s, nx, ny, mode))
- {
- sprintf (wkstr, "Error: HDF putimage call failed (DFerror = %d).", DFerror);
- msg_write (wkstr);
- return (-1);
- }
- }
- else if (mode == 2) /* raw raster */
- {
- if (nx * ny != (nw = write (f, image, nx * ny)))
- {
- if (nw == -1)
- {
- msg_write ("Error: Raw raster write to file failed.");
- close (f);
- return (-1);
- }
- else
- {
- sprintf (wkstr, "Error: Only %d of %d bytes written to raw raster file.", nw, nx * ny);
- msg_write (wkstr);
- close (f);
- return (-1);
- }
- }
- close (f);
- }
- else
- {
- sprintf (wkstr, "Internal error: Bad mode value (Mode = %d).", mode);
- msg_write (wkstr);
- close (f);
- return (-1);
- }
- return (0);
- }
- /* EOF */
- /* cat > src+obj/image/save_proc.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* save_proc: save image to disk */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- save_proc (m, mi)
- Menu m;
- Menu_item mi;
- {
- window_set (imagesave_box, WIN_SHOW, TRUE, 0);
- }
- /* EOF */
- /* cat > src+obj/image/size_ok.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* size_ok: imagesize to big?
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "image.h" */
-
- int
- size_ok (x, y)
- int x, y;
- {
- if (x > XMAX_IMAGE || y > YMAX_IMAGE)
- return (0);
- else
- return (1);
- }
- /* EOF */
- /* cat > src+obj/image/update_image_board.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* update_image_board: updates the image_board with */
- /* filename from pathname frame */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "main.h" */
-
- int
- update_image_board (dir, file)
- char *dir;
- char *file;
- {
- /* put in code later to change the directory if it is
- different then that stored in dir_board */
- panel_set_value (image_board, file);
- }
- /* EOF */
-